package menus;

import herramientas.BitUtil;
import bitclub.Pelicula;
import bitclub.Proveedor;
import bitclub.Tarifa;
import java.util.Date;
import java.util.List;

/**
 * @author Bit Company
 */
public class OpcionesPeliculas {

    /**
     * Para dar de alta peliculas
     */
    public static Pelicula opcionPeliculasDarAlta() {
        Pelicula pelicula;
        BitUtil.borra();

        //Cogemos todos los datos uno a uno
        System.out.println("NUEVA PELICULA");
        System.out.println("____________________");

        String titulo = BitUtil.dameCadenaNoVacio("Titulo: ", 50);
        String genero = BitUtil.dameCadena("Genero: ", 20);
        int ano = BitUtil.dameEntero("Año: ");
        int clasificacionEdad = BitUtil.dameEntero("Class.Edad: ");

        //Seleccionar proveedor:
        Proveedor proveedor = OpcionesProveedores.seleccionarProveedor();

        //Seleccionar tarifa:
        Tarifa tarifa = null;
        do {
            tarifa = OpcionesTarifas.seleccionarTarifa(false);
        } while (tarifa == null);
        
        BitUtil.borra();
        String interpretes = BitUtil.dameCadena("Interpretes: ", 100);
        String nacionalidad = BitUtil.dameCadena("Nacionalidad: ", 20);
        int duracion = BitUtil.dameEntero("Duracion: ");
        String formato = BitUtil.dameCadena("Formato: ", 20);

        pelicula = new Pelicula(titulo, genero, ano, clasificacionEdad, true, new Date(), null, proveedor, tarifa, 0, true, interpretes, nacionalidad, duracion, formato);
        pelicula.nuevo();

        return pelicula;
    }

    /**
     * Ver datos de una pelicula
     * @param articulo 
     */
    public static void opcionPeliculasVer(Pelicula articulo) {
        BitUtil.borra();
        System.out.println(articulo.toString());
        BitUtil.esperaEnter();
    }

    /**
     * Para editar un artículo
     * @param articulo 
     */
    public static Pelicula opcionPeliculasEditar(Pelicula pelicula) {

        Pelicula copia = new Pelicula(pelicula.getId(), pelicula.getTitulo(), pelicula.getGenero(),
                pelicula.getAno(), pelicula.getClasificacionEdad(), pelicula.isActivo(), pelicula.getFechaAlta(),
                pelicula.getFechaBaja(), pelicula.getProveedor(), pelicula.getTarifa(), pelicula.getVecesAlquilada(),
                pelicula.isDisponible(), pelicula.getInterpretes(), pelicula.getNacionalidad(), pelicula.getDuracion(),
                pelicula.getFormato());

        int respuesta = 0;
        boolean algunCambio = false;

        do {
            BitUtil.borra();
            respuesta = BitUtil.muestraMenu("EDITAR PELICULA", new String[]{"Titulo", "Genero", "Año", "Clasificacion Edad", "Fecha Alta", "Fecha Baja", "Tarifa", "Proveedor", "Duracion", "Formato", "Interpretes", "Nacionalidad"});
            System.out.println("\n");
            switch (respuesta) {
                case 1:
                    System.out.println("Titulo: " + pelicula.getTitulo());
                    pelicula.setTitulo(BitUtil.dameCadena("Nuevo Titulo: ", 50));
                    algunCambio = true;
                    break;
                case 2:
                    System.out.println("Genero: " + pelicula.getGenero());
                    pelicula.setGenero(BitUtil.dameCadena("Nuevo Genero: ", 20));
                    algunCambio = true;
                    break;
                case 3:
                    System.out.println("Año: " + pelicula.getAno());
                    pelicula.setAno(BitUtil.dameEntero("Nuevo Año: "));
                    algunCambio = true;
                    break;
                case 4:
                    System.out.println("Class.Edad: " + pelicula.getClasificacionEdad());
                    pelicula.setClasificacionEdad(BitUtil.dameEntero("Nueva Class.Edad: "));
                    algunCambio = true;
                    break;
                case 5:
                    System.out.println("Tarifa: " + pelicula.getTarifa().getNombre());
                    Tarifa tarifa = OpcionesTarifas.seleccionarTarifa();
                    if (tarifa == null) {
                        System.out.println("\nNo se ha cambiado la tarifa\n");
                        BitUtil.esperaEnter();
                    } else {
                        pelicula.setTarifa(tarifa);
                        algunCambio = true;
                    }
                    break;
                case 6:
                    System.out.println("Proveedor: " + pelicula.getProveedor().getNombredeEmpresa());
                    pelicula.setProveedor(OpcionesProveedores.seleccionarProveedor());
                    algunCambio = true;
                    break;
                case 7:
                    System.out.println("Duracion: " + pelicula.getDuracion());
                    pelicula.setDuracion(BitUtil.dameEntero("Nueva Duración: "));
                    algunCambio = true;
                    break;
                case 8:
                    System.out.println("Formato: " + pelicula.getFormato());
                    pelicula.setFormato(BitUtil.dameCadena("Nuevo Formato: ", 20));
                    algunCambio = true;
                    break;
                case 9:
                    System.out.println("Interpretes: " + pelicula.getInterpretes());
                    pelicula.setInterpretes(BitUtil.dameCadena("Nuevos Interpretes: ", 100));
                    algunCambio = true;
                    break;
                case 10:
                    System.out.println("Nacionalidad: " + pelicula.getNacionalidad());
                    pelicula.setNacionalidad(BitUtil.dameCadena("Nueva Nacionalidad: ", 20));
                    algunCambio = true;
                    break;
            }
        } while (respuesta != 0);

        if (algunCambio) {
            BitUtil.borra();
            System.out.println(pelicula.toString());
            System.out.println("\n");
            boolean confirmar = BitUtil.dameConfirmacion("Desea guardar estos cambios? (S/N) ");
            if (confirmar) {
                pelicula.actualizar();
            } else {
                pelicula = Pelicula.seleccionarPorCodigo(pelicula.getId(), false);
                pelicula = copia;
            }
        }
        return pelicula;
    }

    /**
     * Da de baja un artículo o le da de alta si ya estaba de baja
     * @param articulo 
     */
    public static void opcionPeliculasDarBaja(Pelicula pelicula) {
        boolean baja;

        BitUtil.borra();
        System.out.println(pelicula.toStringLinea());
        System.out.println("\n");

        if (pelicula.isActivo()) {
            baja = BitUtil.dameConfirmacion("Esta pelicula esta ACTIVA quiere darle de baja? (S/N) ");
            if (baja) {
                pelicula.setFechaBaja(new Date());
                pelicula.setActivo(false);
                pelicula.setDisponible(false);
                pelicula.actualizar();
                System.out.println("\nLa pelicula ha sido dada de BAJA.\n");
                BitUtil.esperaEnter();
            }
        } else {
            baja = BitUtil.dameConfirmacion("Esta pelicula esta DE BAJA quiere darle de alta? (S/N) ");
            if (baja) {
                pelicula.setActivo(true);
                pelicula.setDisponible(true);
                pelicula.setFechaBaja(null);
                pelicula.actualizar();
                System.out.println("\nLa pelicula ha sido dada de ALTA.\n");
                BitUtil.esperaEnter();
            }
        }

    }

    /**
     * Menú para seleccionar una pelicula
     */
    public static Pelicula seleccionarPelicula(boolean soloDisponibles) {
        Pelicula pelicula = null;
        String titulo;
        int respuesta;
        String opciones[];
        int seleccion;
        String noHay = soloDisponibles
                ? "No hay peliculas con dicho criterio o no estan disponibles\n"
                : "No hay peliculas con dicho criterio\n";

        do {
            BitUtil.borra();
            titulo = "";
            respuesta = BitUtil.muestraMenu("Seleccion de Pelicula", new String[]{"Por Código", "Por Año", "Por Género", "Por Título", "Todas"}, "No seleccionar ninguna");
            switch (respuesta) {
                case 1:
                    BitUtil.borra();
                    System.out.println(BitUtil.muestraSubrayado("Seleccion de Pelicula", "-") + "\n");
                    int codigo = BitUtil.dameEntero("Introduzca Codigo: ");
                    pelicula = Pelicula.seleccionarPorCodigo(codigo, soloDisponibles);
                    if (pelicula == null) {
                        System.out.println(noHay);
                        BitUtil.esperaEnter();
                    } else {
                        respuesta = 0;
                    }
                    break;
                case 2:
                    BitUtil.borra();
                    System.out.println(BitUtil.muestraSubrayado("Seleccion de Pelicula", "-") + "\n");
                    int ano = BitUtil.dameEntero("Introduzca año: ");
                    List<Pelicula> listPelicula = (List) Pelicula.seleccionarPorAno(Integer.toString(ano), soloDisponibles);
                    if (listPelicula.isEmpty()) {
                        BitUtil.borra();
                        System.out.println(BitUtil.muestraSubrayado("Seleccion de Pelicula", "-") + "\n");
                        System.out.println(noHay);
                        BitUtil.esperaEnter();
                    } else {
                        opciones = new String[listPelicula.size()];
                        for (int i = 0; i < listPelicula.size(); i++) {
                            opciones[i] = listPelicula.get(i).getTitulo() + " (" + listPelicula.get(i).getAno() + ")";
                        }
                        BitUtil.borra();
                        seleccion = BitUtil.muestraMenu("Seleccion de Pelicula", opciones, "Ninguna");
                        if (seleccion != 0) {
                            pelicula = listPelicula.get(seleccion - 1);
                            respuesta = 0;
                        }
                    }
                    break;
                case 3:
                    BitUtil.borra();
                    System.out.println(BitUtil.muestraSubrayado("Seleccion de Pelicula", "-") + "\n");
                    String genero = BitUtil.dameCadena("Introduzca genero: ", 20);
                    listPelicula = (List) Pelicula.seleccionarPorGenero(genero, soloDisponibles);
                    if (listPelicula.isEmpty()) {
                        BitUtil.borra();
                        System.out.println(BitUtil.muestraSubrayado("Seleccion de Pelicula", "-") + "\n");
                        System.out.println(noHay);
                        BitUtil.esperaEnter();
                    } else {
                        opciones = new String[listPelicula.size()];
                        for (int i = 0; i < listPelicula.size(); i++) {
                            opciones[i] = listPelicula.get(i).getTitulo() + " (" + listPelicula.get(i).getAno() + ")";
                        }
                        BitUtil.borra();
                        seleccion = BitUtil.muestraMenu("Seleccion de Pelicula", opciones, "Ninguna");
                        if (seleccion != 0) {
                            pelicula = listPelicula.get(seleccion - 1);
                            respuesta = 0;
                        }
                    }
                    break;
                case 4:
                    BitUtil.borra();
                    System.out.println(BitUtil.muestraSubrayado("Seleccion de Pelicula", "-") + "\n");
                    titulo = BitUtil.dameCadena("Introduzca titulo: ", 50);
                case 5:
                    listPelicula = (List) Pelicula.seleccionarPorTitulo(titulo, soloDisponibles);
                    if (listPelicula.isEmpty()) {
                        BitUtil.borra();
                        System.out.println(BitUtil.muestraSubrayado("Seleccion de Pelicula", "-") + "\n");
                        System.out.println(noHay);
                        BitUtil.esperaEnter();
                    } else {
                        opciones = new String[listPelicula.size()];
                        for (int i = 0; i < listPelicula.size(); i++) {
                            opciones[i] = listPelicula.get(i).getTitulo() + " (" + listPelicula.get(i).getAno() + ")";
                        }
                        BitUtil.borra();
                        seleccion = BitUtil.muestraMenu("Seleccion de Pelicula", opciones, "Ninguna");
                        if (seleccion != 0) {
                            pelicula = listPelicula.get(seleccion - 1);
                            respuesta = 0;
                        }
                    }
                    break;
            }
        } while (respuesta != 0);

        return pelicula;
    }
}
